package com.tiancheng.trade.settlement.model.settlement;

import com.baomidou.mybatisplus.annotation.TableName;
import com.tiancheng.trade.settlement.model.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;

import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @Auther: wx
 * @Date: 2024/3/25 15:08
 * @Param ${tags}
 * @Description:清分账单数据表（数据需拆分到待对账表）
 */
@Setter
@Getter
@TableName("settlement_bill_data")
public class SettlementBillData extends BaseEntity implements java.io.Serializable {
    /**
     * 订单交易时间
     */
    private LocalDateTime payTime;
    /**
     * 支付流水号
     */
    @NotNull
    private String flowId;
    /**
     * 核销ID
     */
    private String verificationId;
    /**
     * 核销金额
     */
    private Integer verifiedAmount;
    /**
     * 核销时间
     */
    private LocalDateTime verifiedTime;
    /**
     * 主订单号
     */
    @NotNull
    private String orderId;
    /**
     * 子订单号
     */
    @NotNull
    private String subOrderId;

    /**
     * 子订单金额
     */
    private Integer subOrderAmount;
    @NotNull
    /** 子订单金数量*/
    private Integer subOrderCount;
    /**
     * 实际支付金额
     */
    private Integer actualAmount;
    /**
     * 成本价
     */
    private Integer costPrice;
    /**
     * 退款ID
     */
    private String refundId;
    /**
     * 申请退款金额
     */
    private Integer applyRefundAmount;
    /**
     * 实际退款金额
     */
    private Integer refundAmount;
    /**
     * 退款时间
     */
    private LocalDateTime refundTime;
    /**
     * 子订单优惠金额
     */
    private Integer discountAmount;
    /**
     * 商户编码/商户ID
     */
    @NotNull
    private String merchantCode;

    /**
     * 商户名称
     */
    @NotNull
    private String merchantName;
    /**
     * 产品编码/产品ID
     */
    @NotNull
    private String productCode;
    /**
     * 业务侧产品编码/产品ID
     */
    private String productCodeBusiness;
    /**
     * 商品名称
     */
    @NotNull
    private String productName;
    /**
     * 商品数量
     */
    private Integer productCount;
    /**
     * 支付渠道编码
     */
    @NotNull
    private String payChannelCode;

    /**
     * 业务类型1-酒店，2-机票，3-门票，4-精品路线，5-汽车票，6-自由行，7交通，8-包车
     */
    @NotNull
    private String orderSource;

    /**
     * 结算类型(1:清分 2:自营，3：平台)
     */
    private String settlementType;
    /**
     * 清分规则编号
     */
    private String clearRuleCode;
    /**
     * 清分周期类型(1:按天 2:按月)
     */
    private String clearingCycleMode;
    /**
     * 清分周期值
     */
    private Integer clearingCycleValue;
    /**
     * 清分周期拓展值
     */
    private Integer clearingCycleValueExt;
    /**
     * 清分规则(1:百分比 2:固定金额)
     */
    private String clearingRule;
    /**
     * 应清分日期
     */
    private LocalDateTime shouldClearDate;

    /**
     * 应对账日期
     */
    private LocalDateTime shouldBillDate;

    /**
     * 清分规则名称
     */
    private String ruleName;
    /**
     * 费率
     */
    private BigDecimal rate;
    /**
     * 手续费
     */
    private int serviceCharge;
    /**
     * 是否异常
     */
    private Boolean isException;
    /**
     * 异常类型 0-无异常，1-规则缺失，2-金额异常
     */
    private String exceptionType;
    /**
     * 交易类型,VE-核销，RE-退款
     */
    @NotNull
    private String tradeType;

    /**
     * 数据状态  AS-已拆分，NS-未拆分
     */
    private String dataStatus = "NS";

    /**
     * 备注
     */
    private String remark;
    /**
     * 银行侧商户号（避免重新匹配清分规则时再去商户中心查询）
     */
    private String subMchId;

}
